package com.jqyd.mod.orm;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 字段标签
 * <p>
 * <table>
 * <tr><td>java</td><td>mysql 类型默认对照表</td></tr>
 * <tr><td>UUID</td><td>binary(16)</td></tr>
 * <tr><td>boolean</td><td>boolean</td></tr>
 * <tr><td>byte</td><td>binary</td></tr>
 * <tr><td>long</td><td>binary</td></tr>
 * <tr><td>short</td><td>smallint</td></tr>
 * <tr><td>int</td><td>int</td></tr>
 * <tr><td>float</td><td>float</td></tr>
 * <tr><td>double</td><td>decimal(17,5)</td></tr>
 * <tr><td>String</td><td>nvarchar</td></tr>
 * </table>
 * 
 * @author modi
 * 
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value=ElementType.FIELD)
public @interface DBColumn {
	public static final String DefaultValue = DBTable.DefaultValue;
	//public static final String Date = "datetime";
	public static final String Char2 = "char(2)";
	/**
	 * 用于图片
	 */
	public static final String Longblob = "longblob";
//	public static final String Double2 = "decimal(17,2)";
	public static final String TypePoint = "decimal(12,8)";
	public static final String Type_Text = "text";
	public static final String LONGTEXT = "LONGTEXT";
	public static final int DefaultLength = 100;
	/**
	 * 日期属性标示
	 * @return
	 */
	boolean date() default false;
	/**
	 * 是否全部级联操作
	 * @return
	 */
	boolean cascadeAll() default true;
	/**
	 * 更新时是否进行级联操作
	 * @return
	 */
	boolean cascadeUpdate() default true;
	/**
	 * 删除时是否进行级联操作
	 * @return
	 */
	boolean cascadeDelete() default true;
	/**
	 * 查询时是否进行级联操作
	 * @return
	 */
	boolean cascadeFind() default true;
	/**
	 * 插入时是否进行级联操作
	 * @return
	 */
	boolean cascadeInsert() default true;
	/**
	 * 是否映射，默认为true(映射)
	 * @return
	 */
	boolean mapping() default true;
	/**
	 * 是否可以为null
	 * @return
	 */
	boolean canNull() default true;
	/**
	 * 字段名称（默认用属性名）
	 * 
	 * @return
	 */
	public String name() default DefaultValue;

	/**
	 * 字段类型（默认参照对照表）
	 * <table>
	 * <tr><td>java</td><td>mysql 类型默认对照表</td></tr>
	 * <tr><td>UUID</td><td>binary(16)</td></tr>
	 * <tr><td>boolean</td><td>boolean</td></tr>
	 * <tr><td>byte</td><td>binary</td></tr>
	 * <tr><td>short</td><td>smallint</td></tr>
	 * <tr><td>int</td><td>int</td></tr>
	 * <tr><td>float</td><td>float</td></tr>
	 * <tr><td>double</td><td>decimal(17,5)</td></tr>
	 * <tr><td>String</td><td>nvarchar</td></tr>
	 * <tr><td>long</td><td>bigint(20)</td></tr>
	 * <tr><td>Date</td><td>datetime</td></tr>
	 * </table>
	 * 
	 * @return
	 */
	public String type() default DefaultValue;
	/**
	 * 字段长度（默认100）
	 * 
	 * @return
	 */
	public int length() default 100;
	/**
	 * 是否是ID字段，不管是否是主键ID还是关联ID,被标识成ID的字段在数据库被自动转换成binary(16)
	 * @return
	 */
	boolean id() default false;
	/**
	 * 主键ID
	 * @return
	 */
	boolean primaryId() default false;
	/**
	 * 字段备注
	 * @return
	 */
	String comment() default ""; 

	// =====default=====
	public String defaultStr() default DefaultValue;

	public int defaultInt() default 0;

	public long defaultLong() default 0;

	public double defaultDouble() default 0.0;
}
